package org.jsola.hr.web;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.jsola.core.Page;
import org.jsola.core.Result;
import org.jsola.hr.dto.ApplyToProgPositionAddDTO;
import org.jsola.hr.dto.ApplyToProgPositionUpdateDTO;
import org.jsola.hr.query.ApplyToProgPositionQuery;
import org.jsola.hr.vo.ApplyToProgPositionListVO;
import org.jsola.hr.vo.ApplyToProgPositionVO;

import java.util.List;

/**
 * @author zhr
 */
@Api(tags = "hr-方案适用设置岗位")
public interface IApplyToProgPositionControllerAPI {

    /**
     * 新增方案适用设置岗位
     * @param applyToProgPositionAddDTO 方案适用设置岗位新增实体
     * @return 方案适用设置岗位展示对象
     */
    @ApiOperation(value = "新增方案适用设置岗位")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "applyToProgPositionAddDTO", dataType = "ApplyToProgPositionAddDTO", value = "新增方案适用设置岗位", paramType = "body")
    })
    Result<ApplyToProgPositionVO> save(ApplyToProgPositionAddDTO applyToProgPositionAddDTO);


    /**
     * 修改方案适用设置岗位
     * @param applyToProgPositionUpdateDTO 方案适用设置岗位
     * @return 更新数量
     */
    @ApiOperation(value = "修改方案适用设置岗位")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "applyToProgPositionUpdateDTO", dataType = "ApplyToProgPositionUpdateDTO", value = "修改方案适用设置岗位", paramType = "body")
    })
    Result<Integer> update(ApplyToProgPositionUpdateDTO applyToProgPositionUpdateDTO);




    /**
     * 删除单个方案适用设置岗位，彻底删除
     * @param applyToProgPositionId 方案适用设置岗位id
     * @return 删除数量
     */
    @ApiOperation(value="删除单个方案适用设置岗位，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "applyToProgPositionId", dataType = "String", value = "方案适用设置岗位id", paramType = "path")
    })
    Result<Integer> delete(String applyToProgPositionId);


    /**
     * 批量删除方案适用设置岗位，彻底删除
     * @param applyToProgPositionIds 方案适用设置岗位id集合
     * @return 删除数量
     */
    @ApiOperation(value = "批量删除方案适用设置岗位，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "applyToProgPositionIds", dataType = "String[]", value = "方案适用设置岗位id数组", paramType = "body" ,allowMultiple = true)
    })
    Result<Integer> deleteBatch(String[] applyToProgPositionIds);


    /**
     * 根据方案适用设置岗位id查询方案适用设置岗位详情
     * @param applyToProgPositionId 方案适用设置岗位id
     * @return 方案适用设置岗位详情
     */
    @ApiOperation(value="根据方案适用设置岗位id查询方案适用设置岗位详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "applyToProgPositionId", dataType = "String", value = "方案适用设置岗位id", paramType = "path")
    })
    Result<ApplyToProgPositionVO> findById(String applyToProgPositionId);


    /**
     * 查询方案适用设置岗位
     * @param applyToProgPositionQuery 方案适用设置岗位查询参数
     * @return page
     */
    @ApiOperation(value="查询方案适用设置岗位")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "applyToProgPositionQuery", dataType = "ApplyToProgPositionQuery", value = "方案适用设置岗位查询参数", paramType = "query")
    })
    Result<List<ApplyToProgPositionListVO>> listAll(ApplyToProgPositionQuery applyToProgPositionQuery);


     /**
     * 分页查询方案适用设置岗位
     * @param applyToProgPositionQuery 方案适用设置岗位查询参数
     * @return page
     */
    @ApiOperation(value="分页查询方案适用设置岗位")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "applyToProgPositionQuery", dataType = "ApplyToProgPositionQuery", value = "方案适用设置岗位查询参数", paramType = "query")
    })
    Result<Page<ApplyToProgPositionListVO>> page(ApplyToProgPositionQuery applyToProgPositionQuery);


}

